CC = gcc
CPP = g++
LD = g++
FLEX = flex
BISON = bison

LLVM_MODULES = core jit native
CCFLAGS = -Wall -g
CPPFLAGS = -Wall -g `llvm-config-3.0 --cppflags $(LLVM_MODULES)`
LDFLAGS = `llvm-config-3.0 --ldflags $(LLVM_MODULES)`
LIBS = `llvm-config-3.0 --libs $(LLVM_MODULES)`

PROGRAM = espresso

CCOBJS = ast.o \
		errmsg.o \
		main.o \
		symbol.o \
		table.o \
		utils.o \
		parser.o \
		lexer.o \
		types.o \
		env.o \
		semantic.o \

CPPOBJS = codegen.o

$(PROGRAM): $(CCOBJS) $(CPPOBJS)
	$(LD) -o $@ $(CCOBJS) $(CPPOBJS) $(LIBS) $(LDFLAGS)

parser.c: parser.y
	$(BISON) -o $@ -d $^

lexer.c: lexer.l
	$(FLEX) -o $@ $^

%.o: %.c
	$(CC) -o $@ -c $(CCFLAGS) $<
	
%.o: %.cpp
	$(CPP) -o $@ -c $(CPPFLAGS) $<

clean:
	$(RM) $(PROGRAM) parser.c parser.h lexer.c $(CCOBJS) $(CPPOBJS)
